package activiti.day04;

import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: 蔡翔
 * @Date: 2019/9/9 10:53
 * @Version 1.0
 *
 * 流程变量的测试
 */
public class VariableTest2 {

    /*//步骤 3
    // 完成任务 zhangsan --> lisi(判断流程变量 的请假天数 ，1天) --> zhaoliu（走人事分支）
    public static void main(String[] args) {
        //1.得到ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2.得到TaskService
        TaskService taskService = processEngine.getTaskService();

        //3.查询当前用户是否有任务
        String key = "myProcess_1";
        Task task = taskService.createTaskQuery().processDefinitionKey(key)
                .taskAssignee("zhaoliu")
                .singleResult();

        //初始化一些参数
        Map<String,Object> map = new HashMap<>();
        Holiday holiday = new Holiday();
        holiday.setNum(5F);
        map.put("holiday",holiday);


        //4.判断task！= null 说明当前用户有任务。
        if(task!=null){
            //taskService.complete(task.getId(),map);  //***任务完成时 设置流程变量的值，在后面加上map，map里面包含了你需要传递的值。
            taskService.complete(task.getId());
            System.out.println("任务执行完毕");
        }
    }*/



    //步骤 2
    // 启动流程实例，同时还要设置流程变量的值
    // act_ge_bytearray
    // act_ru_variable
    public static void main(String[] args) {
        //1.得到ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2.得到RuntimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();

        //3.流程定义的key问题，，myProcess_1
        String key = "myProcess_1";

        Map<String,Object> map = new HashMap<>();

        Holiday holiday = new Holiday();
        holiday.setNum(10F);
        //这样 map 的集合里面就放了 holiday 这个对象，这样与流程定义中的 ${holiday.num>3} 的holiday，就对应上了。
        map.put("holiday",holiday);

        //4.启动流程实例，并且设置流程变量的值。 注意这里 是byKey ，虽然是依据bpmn的id。
        //注意 这里把map传入 startProcessInstanceByKey，map中的holiday 必须序列化，否则会报错异常的。
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(key,map);

        //5.输出实例的信息
        System.out.println(processInstance.getName());
        System.out.println(processInstance.getProcessDefinitionId());

    }


    /*//步骤 1
    // 新的请假流程定义的部署
    public static void main(String[] args) {
        //1.得到ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2.得到RepositoryService对象。
        RepositoryService repositoryService = processEngine.getRepositoryService();

        //3.部署  (依据新的流程文件bpmn，部署新的流程)
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("test.bpmn")
                .addClasspathResource("test.png")
                .name("请假流程-流程变量")
                .deploy();

         System.out.println(deployment.getId());
        System.out.println(deployment.getName());
    }*/
}
